home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
PROGRAMM
/
PASCAL
/
0191.ZIP
/
HEXDUMP.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1984-06-22
|
2KB
|
114 lines
PROGRAM hexdump;
{ This program will dump in hex and ascii form a file that the user }
{ specifies. Written for Turbo Pascal by Jeff Firestone. June 1984. }
CONST
ArrSize = 128;
VAR
argc, i, numin, tot, cfrom: INTEGER;
f : FILE;
Buffer : ARRAY [0..ArrSize] OF CHAR;
PROCEDURE ohib(nib:CHAR);
BEGIN
i:= ORD(nib);
i:= i AND 15;
IF (i >= 10) THEN
WRITE(CHR(i - 10 + ORD('A')))
ELSE
WRITE(i);
END;
PROCEDURE ohb(byt:CHAR);
VAR
TmpByt : CHAR;
BEGIN
TmpByt:= CHR(ORD(byt) SHR 4);
ohib(TmpByt);
ohib(byt);
END;
PROCEDURE ohw(wrd:INTEGER);
VAR
TmpByt : CHAR;
BEGIN
TmpByt:= CHR(HI(wrd));
ohb(TmpByt);
TmpByt:= CHR(LO(wrd));
ohb(TmpByt);
END;
PROCEDURE OpenFile;
VAR Name : STRING[20];
BEGIN
FILLCHAR(Buffer, SIZEOF(Buffer), 0);
WRITE('What file would you like to dump in hex form : ');
READLN(Name);
ASSIGN(f, Name);
RESET(f);
END;
PROCEDURE DoHexDump;
BEGIN
tot:= 0;
REPEAT
{ Read in a block of characters from the file }
BLOCKREAD(f, Buffer, 1);
cfrom:= 0;
WHILE cfrom < ArrSize-1 DO
BEGIN
{ Print the offset in HEX }
ohw(tot);
WRITE(' :');
{ Print the bytes in HEX }
FOR i:= 0 TO 7 DO
BEGIN
WRITE(' ');
ohb(buffer[cfrom]);
cfrom:= cfrom + 1;
END;
WRITE(' ');
FOR i:= 8 TO 15 DO
BEGIN
WRITE(' ');
ohb(buffer[cfrom]);
cfrom:= cfrom + 1;
END;
cfrom:= cfrom - 16;
WRITE(' '+CHR(186)+' ');
{ Print the bytes in ASCII }
FOR i:= 0 TO 15 DO
BEGIN
IF ((Buffer[cfrom] < ' ') OR (ORD(Buffer[cfrom]) >= $7F)) THEN
Buffer[cfrom]:= '.';
WRITE(Buffer[cfrom]);
cfrom:= cfrom + 1;
END;
WRITELN(' '+CHR(186));
tot:= tot + 16;
IF (tot MOD 128) = 0 THEN WRITELN;
END; { While }
UNTIL EOF(f);
CLOSE(f);
END;
BEGIN
OpenFile;
DoHexDump;
END.